home *** CD-ROM | disk | FTP | other *** search
/ Network PC / Network PC.iso / amiga utilities / communication / bbs / termv4.6 / extras / source / term-source.lha / MacroPanel.c < prev    next >
Encoding:
C/C++ Source or Header  |  1996-03-18  |  8.4 KB  |  386 lines

  1. /*
  2. **    MacroPanel.c
  3. **
  4. **    Editing panel for key macro configuration
  5. **
  6. **    Copyright © 1990-1996 by Olaf `Olsen' Barthel
  7. **        All Rights Reserved
  8. **
  9. **    :ts=4
  10. */
  11.  
  12. #ifndef _GLOBAL_H
  13. #include "Global.h"
  14. #endif
  15.  
  16. enum    {    GAD_QUALIFIER=1,GAD_F1,GAD_F2,GAD_F3,GAD_F4,GAD_F5,GAD_F6,GAD_F7,
  17.             GAD_F8,GAD_F9,GAD_F10,GAD_USE,GAD_LOAD,GAD_SAVE,GAD_CANCEL,
  18.             GAD_DISCARD
  19.         };
  20.  
  21. BOOL
  22. MacroPanelConfig(struct Configuration *LocalConfig,struct MacroKeys *MacroKeys,STRPTR LastMacros,struct Window *Parent,BOOLEAN *ChangePtr)
  23. {
  24.     struct MacroKeys    *Keys;
  25.     BOOL                 Changed = FALSE;
  26.  
  27.     if(Keys = (struct MacroKeys *)AllocVecPooled(sizeof(struct MacroKeys),MEMF_ANY))
  28.     {
  29.         struct LayoutHandle *Handle;
  30.  
  31.         CopyMem(MacroKeys,Keys,sizeof(struct MacroKeys));
  32.  
  33.         if(Handle = LT_CreateHandleTags(Parent -> WScreen,
  34.             LH_LocaleHook,    &LocaleHook,
  35.         TAG_DONE))
  36.         {
  37.             struct Window *PanelWindow;
  38.  
  39.             LT_New(Handle,
  40.                 LA_Type,VERTICAL_KIND,
  41.             TAG_DONE);
  42.             {
  43.                 LT_New(Handle,
  44.                     LA_Type,VERTICAL_KIND,
  45.                 TAG_DONE);
  46.                 {
  47.                     LT_New(Handle,
  48.                         LA_Type,        CYCLE_KIND,
  49.                         LA_LabelID,        MSG_MACROPANEL_KEY_MODIFIER_GAD,
  50.                         LA_ID,            GAD_QUALIFIER,
  51.                         LACY_TabKey,    TRUE,
  52.                         LACY_FirstLabel,MSG_MACROPANEL_NONE_TXT,
  53.                         LACY_LastLabel,    MSG_MACROPANEL_CONTROL_TXT,
  54.                     TAG_DONE);
  55.  
  56.                     LT_New(Handle,
  57.                         LA_Type,        XBAR_KIND,
  58.                     TAG_DONE);
  59.  
  60.                     LT_EndGroup(Handle);
  61.                 }
  62.  
  63.                 LT_New(Handle,
  64.                     LA_Type,VERTICAL_KIND,
  65.                 TAG_DONE);
  66.                 {
  67.                     STATIC STRPTR Labels[10] =
  68.                     {
  69.                         "F _1",
  70.                         "F _2",
  71.                         "F _3",
  72.                         "F _4",
  73.                         "F _5",
  74.                         "F _6",
  75.                         "F _7",
  76.                         "F _8",
  77.                         "F _9",
  78.                         "F1_0"
  79.                     };
  80.  
  81.                     LONG i;
  82.  
  83.                     for(i = 0 ; i < 10 ; i++)
  84.                     {
  85.                         LT_New(Handle,
  86.                             LA_Type,        STRING_KIND,
  87.                             LA_LabelText,    Labels[i],
  88.                             LA_Chars,        40,
  89.                             LA_ID,            GAD_F1 + i,
  90.                         TAG_DONE);
  91.                     }
  92.  
  93.                     LT_EndGroup(Handle);
  94.                 }
  95.  
  96.                 LT_New(Handle,
  97.                     LA_Type,VERTICAL_KIND,
  98.                 TAG_DONE);
  99.                 {
  100.                     LT_New(Handle,
  101.                         LA_Type,        XBAR_KIND,
  102.                         LAXB_FullSize,    TRUE,
  103.                     TAG_DONE);
  104.  
  105.                     LT_EndGroup(Handle);
  106.                 }
  107.  
  108.                 LT_New(Handle,LA_Type,HORIZONTAL_KIND,
  109.                     LAGR_SameSize,    TRUE,
  110.                     LAGR_Spread,    TRUE,
  111.                 TAG_DONE);
  112.                 {
  113.                     LT_New(Handle,
  114.                         LA_Type,        BUTTON_KIND,
  115.                         LA_LabelID,        MSG_GLOBAL_USE_GAD,
  116.                         LA_ID,            GAD_USE,
  117.                         LABT_ReturnKey,    TRUE,
  118.                         LABT_ExtraFat,    TRUE,
  119.                     TAG_DONE);
  120.  
  121.                     LT_New(Handle,
  122.                         LA_Type,        BUTTON_KIND,
  123.                         LA_LabelID,        MSG_GLOBAL_LOAD_GAD,
  124.                         LA_ID,            GAD_LOAD,
  125.                     TAG_DONE);
  126.  
  127.                     LT_New(Handle,
  128.                         LA_Type,        BUTTON_KIND,
  129.                         LA_LabelID,        MSG_GLOBAL_SAVE_GAD,
  130.                         LA_ID,            GAD_SAVE,
  131.                     TAG_DONE);
  132.  
  133.                     LT_New(Handle,
  134.                         LA_Type,        BUTTON_KIND,
  135.                         LA_LabelID,        MSG_DISCARD_GAD,
  136.                         LA_ID,            GAD_DISCARD,
  137.                     TAG_DONE);
  138.  
  139.                     LT_New(Handle,
  140.                         LA_Type,        BUTTON_KIND,
  141.                         LA_LabelID,        MSG_GLOBAL_CANCEL_GAD,
  142.                         LA_ID,            GAD_CANCEL,
  143.                         LABT_EscKey,    TRUE,
  144.                     TAG_DONE);
  145.  
  146.                     LT_EndGroup(Handle);
  147.                 }
  148.  
  149.                 LT_EndGroup(Handle);
  150.             }
  151.  
  152.             if(PanelWindow = LT_Build(Handle,
  153.                 LAWN_TitleID,        MSG_MACROPANEL_MACRO_PREFERENCES_TXT,
  154.                 LAWN_IDCMP,            IDCMP_CLOSEWINDOW,
  155.                 LAWN_HelpHook,        &GuideHook,
  156.                 LAWN_Parent,        Parent,
  157.                 WA_DepthGadget,        TRUE,
  158.                 WA_CloseGadget,        TRUE,
  159.                 WA_DragBar,            TRUE,
  160.                 WA_RMBTrap,            TRUE,
  161.                 WA_Activate,        TRUE,
  162.                 WA_SimpleRefresh,    TRUE,
  163.             TAG_DONE))
  164.             {
  165.                 struct IntuiMessage        *Message;
  166.                 BOOL                     Done = FALSE;
  167.                 ULONG                     MsgClass;
  168.                 UWORD                     MsgCode;
  169.                 struct Gadget            *MsgGadget;
  170.                 UBYTE                     DummyBuffer[MAX_FILENAME_LENGTH],
  171.                                         *DummyChar;
  172.                 struct FileRequester    *FileRequest;
  173.                 LONG                     Modifier = 0,i;
  174.  
  175.                 GuideContext(CONTEXT_MACROS);
  176.  
  177.                 PushWindow(PanelWindow);
  178.  
  179.                 LT_ShowWindow(Handle,TRUE);
  180.  
  181.                 if(XEmulatorBase && LocalConfig && LocalConfig -> TerminalConfig -> EmulationMode == EMULATION_EXTERNAL)
  182.                 {
  183.                     ULONG KeyMask = XEmulatorGetFreeMacroKeys(XEM_IO,Modifier);
  184.  
  185.                     for(i = 0 ; i < 10 ; i++)
  186.                     {
  187.                         LT_SetAttributes(Handle,GAD_F1 + i,
  188.                             GTST_String,    Keys -> Keys[Modifier][i],
  189.                             GA_Disabled,    !(KeyMask & (1L << i)),
  190.                         TAG_DONE);
  191.                     }
  192.                 }
  193.                 else
  194.                 {
  195.                     for(i = 0 ; i < 10 ; i++)
  196.                     {
  197.                         LT_SetAttributes(Handle,GAD_F1 + i,
  198.                             GTST_String,Keys -> Keys[Modifier][i],
  199.                         TAG_DONE);
  200.                     }
  201.                 }
  202.  
  203.                 do
  204.                 {
  205.                     if(Wait(PORTMASK(PanelWindow -> UserPort) | SIG_BREAK) & SIG_BREAK)
  206.                         break;
  207.  
  208.                     while(Message = (struct IntuiMessage *)LT_GetIMsg(Handle))
  209.                     {
  210.                         MsgClass    = Message -> Class;
  211.                         MsgCode        = Message -> Code;
  212.                         MsgGadget    = (struct Gadget *)Message -> IAddress;
  213.  
  214.                         LT_ReplyIMsg(Message);
  215.  
  216.                         if(MsgClass == IDCMP_CLOSEWINDOW)
  217.                         {
  218.                             Done = TRUE;
  219.                             Changed = FALSE;
  220.                         }
  221.  
  222.                         if(MsgClass == IDCMP_GADGETUP)
  223.                         {
  224.                             switch(MsgGadget -> GadgetID)
  225.                             {
  226.                                 case GAD_QUALIFIER:
  227.  
  228.                                     for(i = 0 ; i < 10 ; i++)
  229.                                         strcpy(Keys -> Keys[Modifier][i],(STRPTR)LT_GetAttributes(Handle,GAD_F1 + i,TAG_DONE));
  230.  
  231.                                     Modifier = MsgCode;
  232.  
  233.                                     if(XEmulatorBase && LocalConfig && LocalConfig -> TerminalConfig -> EmulationMode == EMULATION_EXTERNAL)
  234.                                     {
  235.                                         ULONG KeyMask = XEmulatorGetFreeMacroKeys(XEM_IO,Modifier);
  236.  
  237.                                         for(i = 0 ; i < 10 ; i++)
  238.                                         {
  239.                                             LT_SetAttributes(Handle,GAD_F1 + i,
  240.                                                 GTST_String,    Keys -> Keys[Modifier][i],
  241.                                                 GA_Disabled,    !(KeyMask & (1L << i)),
  242.                                             TAG_DONE);
  243.                                         }
  244.                                     }
  245.                                     else
  246.                                     {
  247.                                         for(i = 0 ; i < 10 ; i++)
  248.                                         {
  249.                                             LT_SetAttributes(Handle,GAD_F1 + i,
  250.                                                 GTST_String,Keys -> Keys[Modifier][i],
  251.                                             TAG_DONE);
  252.                                         }
  253.                                     }
  254.  
  255.                                     break;
  256.  
  257.                                 case GAD_USE:
  258.  
  259.                                     LT_LockWindow(PanelWindow);
  260.  
  261.                                     for(i = 0 ; i < 10 ; i++)
  262.                                         strcpy(Keys -> Keys[Modifier][i],(STRPTR)LT_GetAttributes(Handle,GAD_F1 + i,TAG_DONE));
  263.  
  264.                                     CopyMem(Keys,MacroKeys,sizeof(struct MacroKeys));
  265.  
  266.                                     Changed = TRUE;
  267.  
  268.                                     if(ChangePtr)
  269.                                         *ChangePtr |= TRUE;
  270.  
  271.                                     Done = TRUE;
  272.                                     break;
  273.  
  274.                                 case GAD_LOAD:
  275.  
  276.                                     strcpy(DummyBuffer,LastMacros);
  277.  
  278.                                     DummyChar = PathPart(DummyBuffer);
  279.  
  280.                                     *DummyChar = 0;
  281.  
  282.                                     LT_LockWindow(PanelWindow);
  283.  
  284.                                     if(FileRequest = GetFile(PanelWindow,LocaleString(MSG_MACROPANEL_LOAD_MACRO_KEYS_TXT),DummyBuffer,FilePart(LastMacros),DummyBuffer,"#?.prefs",FALSE,FALSE,FALSE,LocaleString(MSG_GLOBAL_LOAD_TXT),TRUE))
  285.                                     {
  286.                                         if(!LoadMacros(DummyBuffer,Keys))
  287.                                             ShowError(PanelWindow,ERR_LOAD_ERROR,IoErr(),DummyBuffer);
  288.                                         else
  289.                                         {
  290.                                             Changed = TRUE;
  291.  
  292.                                             if(ChangePtr)
  293.                                                 *ChangePtr = FALSE;
  294.  
  295.                                             strcpy(LastMacros,DummyBuffer);
  296.  
  297.                                             if(LocalConfig)
  298.                                                 strcpy(LocalConfig -> MacroFileName,LastMacros);
  299.  
  300.                                             for(i = 0 ; i < 10 ; i++)
  301.                                             {
  302.                                                 LT_SetAttributes(Handle,GAD_F1 + i,
  303.                                                     GTST_String,Keys -> Keys[Modifier][i],
  304.                                                 TAG_DONE);
  305.                                             }
  306.                                         }
  307.  
  308.                                         FreeAslRequest(FileRequest);
  309.                                     }
  310.  
  311.                                     LT_UnlockWindow(PanelWindow);
  312.  
  313.                                     break;
  314.  
  315.                                 case GAD_SAVE:
  316.  
  317.                                     strcpy(DummyBuffer,LastMacros);
  318.  
  319.                                     DummyChar = PathPart(DummyBuffer);
  320.  
  321.                                     *DummyChar = 0;
  322.  
  323.                                     LT_LockWindow(PanelWindow);
  324.  
  325.                                     for(i = 0 ; i < 10 ; i++)
  326.                                         strcpy(Keys -> Keys[Modifier][i],(STRPTR)LT_GetAttributes(Handle,GAD_F1 + i,TAG_DONE));
  327.  
  328.                                     if(FileRequest = GetFile(PanelWindow,LocaleString(MSG_MACROPANEL_SAVE_MACRO_KEYS_TXT),DummyBuffer,FilePart(LastMacros),DummyBuffer,"#?.prefs",TRUE,FALSE,FALSE,LocaleString(MSG_GLOBAL_SAVE_TXT),TRUE))
  329.                                     {
  330.                                         if(!WriteIFFData(DummyBuffer,Keys,sizeof(struct MacroKeys),ID_KEYS))
  331.                                             ShowError(PanelWindow,ERR_SAVE_ERROR,IoErr(),DummyBuffer);
  332.                                         else
  333.                                         {
  334.                                             strcpy(LastMacros,DummyBuffer);
  335.  
  336.                                             if(LocalConfig)
  337.                                                 strcpy(LocalConfig -> MacroFileName,LastMacros);
  338.  
  339.                                             if(ChangePtr)
  340.                                                 *ChangePtr = FALSE;
  341.                                         }
  342.  
  343.                                         FreeAslRequest(FileRequest);
  344.                                     }
  345.  
  346.                                     LT_UnlockWindow(PanelWindow);
  347.  
  348.                                     break;
  349.  
  350.                                 case GAD_DISCARD:
  351.  
  352.                                     Done = Changed = TRUE;
  353.  
  354.                                     if(ChangePtr)
  355.                                         *ChangePtr = FALSE;
  356.  
  357.                                     LastMacros[0] = 0;
  358.  
  359.                                     if(LocalConfig)
  360.                                         strcpy(LocalConfig -> MacroFileName,LastMacros);
  361.  
  362.                                     break;
  363.  
  364.                                 case GAD_CANCEL:
  365.  
  366.                                     Done = TRUE;
  367.                                     Changed = FALSE;
  368.                                     break;
  369.                             }
  370.                         }
  371.                     }
  372.                 }
  373.                 while(!Done);
  374.  
  375.                 PopWindow();
  376.             }
  377.  
  378.             LT_DeleteHandle(Handle);
  379.         }
  380.  
  381.         FreeVecPooled(Keys);
  382.     }
  383.  
  384.     return(Changed);
  385. }
  386.